home *** CD-ROM | disk | FTP | other *** search
/ SunSoft Catalyst CDWARE 1996 May to August / Catalyst CDWARE 1996 May to August.iso / .products / JavaWorld / javaworld / cgi-bin / jw-subscribe.cgi < prev    next >
Text File  |  1996-02-25  |  3KB  |  136 lines

  1. #!/usr/local/bin/perl
  2. # jw-subscribe - script to process subscription forms for JavaWorld.
  3.  
  4. $subject="JW subscription";
  5. $recipient="submaster\@javaworld.com";
  6. $from="jw-subscribe\@javaworld.com";
  7. $mailprog="/usr/lib/sendmail";
  8. $date=`date`; chop($date);
  9.  
  10. read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
  11.  
  12. # Split the name-value pairs
  13. @pairs = split(/&/,$buffer);
  14.  
  15. foreach $pair (@pairs)
  16. {
  17.    ($name,$value) = split(/=/,$pair);
  18.    $value =~ tr/+/ /;
  19.    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  20.  
  21.    # Stop people from using subshells to execute commands
  22.    $value =~ s/~!/ ~!/g; 
  23.  
  24.    $FORM{$name} = $value;
  25. }
  26.  
  27. # check for empty form; thwart bastards
  28.  
  29. $flag0=0;
  30. $flag1=0;
  31. $flag2a=0;
  32. $flag2b=0;
  33. $flag3=0;
  34. $flag4=0;
  35. $flag5=0;
  36. $flag6=0;
  37.  
  38. if ($FORM{'name'} =~ /[A-Za-z]/ && $FORM{'email'} =~ /[A-Za-z]/) {
  39.    $flag0++;
  40. }
  41. if ($FORM{'business.other'} =~ /[A-Za-z]*/) {
  42.    $flag1++;
  43. }
  44. if ($FORM{'installedos.other'} =~ /[A-Za-z]*/) {
  45.    $flag4++;
  46. }
  47. if ($FORM{'primaryos.other'} =~ /[A-Za-z]*/) {
  48.    $flag5++;
  49. }
  50. if ($FORM{'prod.other'} =~ /[A-Za-z]*/) {
  51.    $flag6++;
  52. }
  53. foreach $i (keys %FORM) {
  54.    if ($i =~ /^business$/) {
  55.       $flag1++;
  56.    }
  57.    elsif ($i =~ /^primjob\./) {
  58.       $flag2a++;
  59.    }
  60.    elsif ($i =~ /^employees$/) {
  61.       $flag3++;
  62.    }
  63.    elsif ($i =~ /^installedos\./) {
  64.       $flag4++;
  65.    }
  66.    elsif ($i =~ /^primaryos\./) {
  67.       $flag5++;
  68.    }
  69.    elsif ($i =~ /^prod\./) {
  70.       $flag6++;
  71.    }
  72. }
  73.  
  74. if ($flag0 && $flag1 && $flag2a && $flag3 && $flag4 && $flag5 && $flag6) {
  75.  
  76.    print <<END_OF_MESSAGE;
  77. Content-TYPE:   text/html
  78.  
  79. <HTML>
  80. <HEAD><TITLE>JavaWorld Subscription Response</TITLE></HEAD>
  81. <BODY>
  82. <H3>Thank you for subscribing to <EM>JavaWorld</EM>. We appreciate your
  83. patronage. Send any questions, comments, or suggestions to
  84. editors\@javaworld.com</H3>
  85. </BODY>
  86. </HTML>
  87. END_OF_MESSAGE
  88.  
  89.  
  90.    # send data to JW HQ
  91.  
  92.    open (MAIL, "|$mailprog $recipient") || die "Can't open $mailprog!\n";
  93.    print MAIL "From: $from\n";
  94.    print MAIL "Subject: $subject\n\n";
  95.    print MAIL "BEGIN RECORD $date\n";
  96.    print MAIL "CONTENT_LENGTH=$ENV{'CONTENT_LENGTH'}\n";
  97.    print MAIL "CONTENT_TYPE=$ENV{'CONTENT_TYPE'}\n";
  98.    print MAIL "DOCUMENT_ROOT=$ENV{'DOCUMENT_ROOT'}\n";
  99.    print MAIL "GATEWAY_INTERFACE=$ENV{'GATEWAY_INTERFACE'}\n";
  100.    print MAIL "HTTP_REFERER=$ENV{'HTTP_REFERER'}\n";
  101.    print MAIL "HTTP_USER_AGENT=$ENV{'HTTP_USER_AGENT'}\n";
  102.    print MAIL "QUERY_STRING=$ENV{'QUERY_STRING'}\n";
  103.    print MAIL "REMOTE_ADDR=$ENV{'REMOTE_ADDR'}\n";
  104.    print MAIL "REMOTE_HOST=$ENV{'REMOTE_HOST'}\n";
  105.    print MAIL "REQUEST_METHOD=$ENV{'REQUEST_METHOD'}\n";
  106.    print MAIL "SCRIPT_NAME=$ENV{'SCRIPT_NAME'}\n";
  107.    print MAIL "SERVER_NAME=$ENV{'SERVER_NAME'}\n";
  108.    print MAIL "SERVER_PORT=$ENV{'SERVER_PORT'}\n";
  109.    print MAIL "SERVER_PROTOCOL=$ENV{'SERVER_PROTOCOL'}\n";
  110.    print MAIL "SERVER_SOFTWARE=$ENV{'SERVER_SOFTWARE'}\n";
  111.    print MAIL "ARGV=$ARGV[0]\n";
  112.    print MAIL "STDINDATA=$buffer\n";
  113.  
  114.    print MAIL "END RECORD $date\n";
  115.    close(MAIL);
  116.  
  117. } # end of if bastard else sendmail
  118. else {
  119.    print <<END_OF_MESSAGE;
  120. Content-TYPE: text/html
  121.  
  122. <HTML>
  123. <HEAD><TITLE>JavaWorld-Incomplete Subscription Response</TITLE></HEAD>
  124. <BODY>
  125. <H3>An incomplete form was detected. It must contain a name, e-mail address, 
  126. and responses to questions one through six.</H3>
  127. <H3>To finish subscribing to <EM>JavaWorld</EM>, return to the
  128. subscription form by hitting your browser's back button.</H3>
  129. </BODY>
  130. </HTML>
  131. END_OF_MESSAGE
  132. }
  133.  
  134. exit 0;
  135.  
  136.